home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Netware Super Library
/
Netware Super Library.iso
/
update_h
/
rsu15a
/
rsu.txt
< prev
next >
Wrap
Text File
|
1995-05-14
|
59KB
|
1,739 lines
RSU 1.5
Remote Software Update for Networks-Documentation
Copyright (c) 1992-1995 Burkhard Daniel & Hans-Georg Michna
Table of Contents
Shareware Licensing and Registration 3
Support 5
Disclaimer 5
Introduction 5
How RSU Works 7
Installing RSU 7
RSU Server Preparation 7
Workstation Preparation 7
The RSU Development Cycle 8
Steps in the RSU Development Cycle 8
Prepare an RSU Test Workstation 8
Create and Test the New Module 9
Protect Users From Your Tests 9
Upload the New Module to the RSU
Server 9
Adapt the RSU Program 9
Test the New RSU Program 10
Activate the New RSU Program 10
Programming RSU 10
General Rules 10
Sample RSU Program 11
Execution Sequence 12
Alphabetical List of Commands 12
General Command Syntax and Semantics 12
Sections 13
Environment Variables 13
DOS Commands 14
Echo 14
Goto 14
If 15
IniAddLine 17
IniChangeLine 17
IniCopyLine 17
IniCopySection 18
IniDeleteLine 18
IniDeleteSection 18
SynchronizeDir 18
SynchronizeDir (Old Syntax) 21
Brief Command Overview 23
RSU.DOC [64] 14-May-1995
Shareware Licensing and Registration
RSU including its documentation files is Copyright (c) 1992-1995
Burkhard Daniel and Hans-Georg Michna. It is distributed under
the Shareware concept. Its use on isolated PCs, for example to
change settings in WIN.INI through batch files without the
involvement of any network file server is free, even if the
computer is connected to a network. As soon as RSU is used to
copy files from a network file server to a user's local storage
or to copy any parts of files of the Windows INI type from a
network file server, however, its free use is restricted to a
30 day trial period. After that the shareware fee has to be
paid, if the program is still used.
Since the combinations of file servers and workstations can be
rather involved, some specifications are in order. If RSU is
used to manipulate shared files on other file servers (for
example several slave servers being updated from one master
server), then each target file server being updated counts only
as one user, as long as no individual workstation files are
modified on it. In other words, user workstations do not count
if RSU is not used to alter their individual files like
CONFIG.SYS, AUTOEXEC.BAT, WIN.INI, SYSTEM.INI, PROGMAN.INI,
PROTOCOL.INI or NET.CFG. A special case is that each
workstation has its individual files in a workstation specific
directory on a file server and RSU is used to update the
workstations' individual files on that file server (example:
diskless workstations). In this case, each workstation should
be counted as one user, since RSU is doing exactly the same
amount of work as if the workstation specific files were on
local workstation disks.
The shareware fee for RSU 1.x is US $59.00 or DM 85.00 (German
Mark) for each group of up to 100 users. In other words, if the
program is used for 1 to 100 users, the fee is US $59.00 or DM
85.00. If it is used for 101 to 200 users, the fee is US
$118.00 or DM 170.00, for 201 to 300 users US $177.00 or DM
255.00 and so on. Prices may change in future versions if the
exchange rate changes considerably. Future enhanced versions of
RSU may be more expensive.
In Germany, add the legally prescribed Value Added Tax
(currently 15%).
The program contains no technical means to enforce payment
other than noting the requirement on screen when an
unregistered copy of RSU is started.
To pay the fee through CompuServe log on to CompuServe and
enter the command: GO SWREG. Search for the keyword RSU and
register according to the choices you get on screen. Each
single registration or license is good for up to 100 users.
Alternatively, send a check and your e-mail address (or fax
number) to one of the following addresses.
USA: A.C.I. Micro, Mark Jordan, 45 Roland, Winchester, MO
63021
World: A.C.I. Micro, Hans-Georg Michna, Notingerweg 42, D-
85521 Ottobrunn
In Europe use a Eurocheque for DM 85 or equivalent for each 100
users.
In Germany add the legally prescribed Value Added Tax
(currently 15%).
If you require an invoice, please ask for it by e-mail or send
a purchase order to A.C.I. Micro in Germany. But please keep
bureaucracy to a minimum. If you can, please register directly
through CompuServe's SWREG service, which is much more
convenient and probably cheaper for you as well as for us.
Within the European community please add your VAT ID. The VAT
ID of ACI Micro is: DE 129 2759 98
This is a sample SWREG session in CompuServe:
!go cis:swreg <---{User entry after exclamation mark}
Shareware Registration SWREG
1 Instructions to Register Shareware
2 Register Shareware
3 Instructions to Submit Shareware
4 Submit Shareware (Authors)
5 Shareware Beta Forum +
6 ASP/Shareware Forum +
7 Provide Feedback
8 Frequently Asked Questions
!2 <---{User entry after exclamation mark}
...
Press <CR> to continue! <---{User entry (return key)
after exclamation mark}
Please select the geographic region
for which you will be registering shareware.
1 United States
2 Canada/Mexico
3 Europe
4 Asia/Pacific Rim
5 Central/South America
6 Africa
7 Middle East
8 Australia/New Zealand
Enter region number: 1 <---{User entry after colon}
Register Shareware
SEARCH BY:
1 Registration ID
2 Title
3 File Name
4 Author's User ID
5 Author's Name
6 Keywords (Categories)
Enter choice!6 <---{User entry after exclamation mark}
Register Shareware
Enter Keyword (ex. - GAMES): rsu
Reg ID: 552 Fee (US$): 59.00
Shipping/Handling (US$): 0.00
Title: RSU Version 1
File Name: RSUX.EXE Author: Hans-Georg
Michna [74776,2361]
Size: 69200 Compression: LHA
Computer Type/Operating Systems: DOS, WINDOWS, OS/2
Support: CompuServe Mail to 74776,2361
Forum: GO NOVLIB Library: Shareware
Library Number: 15
RSU V1.0 (Remote Software Update for DOS) is a program
that can
- determine whether a user has the latest update level,
- copy, delete, add lines or whole sections from one INI
file to another,
- add multiple similar lines (like several device= lines
in SYSTEM.INI),
- insert environment variables,
- synchronize directories, i.e. make them equal without
unnecessary copying
and more. Shareware $50 for 100 users. Upload by author.
Would You Like to Register? (Y/N) y <---{User entry
after "(Y/N)"}
When you license RSU, you will receive information including
hints on how to upgrade and a special key to turn RSU into a
registered version, but you will not normally receive any paper
mail. Neither will you receive the program itself, which is
available only on CompuServe and on the Internet. You should
retrieve updates from wherever you received the program in the
first place. From time to time you may receive information on
upgrades and related programs.
The program may be freely distributed as long as the files stay
together unaltered and packed in one file using an archiving
program like PKZIP, LHA or similar. It is not allowed to add
any other files other than minor additions that do not exceed
the size of the original files. It is not allowed to distribute
RSU as part of another program or package because we fear that
this might look as if RSU may no longer require its shareware
fee payment which it always does according to the rules
outlined above.
We have in the past sent information by e-mail when there were
significant changes to RSU. But you have to download the new
versions on your own. You don't have to pay anything again for
any upgrades to RSU version 1.x. Should there be a significant
technological change, like a new operating system, like a 32
bit OS, then there might be an entirely new version of RSU,
which will be handled differently, probably as an entirely
separate product.
Support
Support is available via e-mail from Hans-Georg Michna
74776,2361and from Burkhard Daniel 100342,2050. This support is
free. In our experience, luckily, RSU needs very little
support, because it doesn't seem to cause many problems. But if
you need help, usually in the beginning, please feel free to
send e-mail. The same holds for questions, remarks or proposals
for future enhancements of RSU. You can also reach us through
Internet mail: 74776.2361@compuserve.com and
100342.2050@compuserve.com (Please note the periods in the
place of the commas).
Disclaimer
At the present state of software technology it is not possible
to create error-free software. RSU may contain errors. Anybody
using it should take precautions like creating safety backups
in case a defect causes damage to any computer or data. The
authors of RSU can under no circumstances be held responsible
for any damage.
Microsoft⌐ is a trademark of Microsoft, Inc.
Introduction
RSU (Remote Software Update) is a program that updates the
software on many individual workstation1 PCs connected to a
file server. The file server, when equipped with RSU, becomes
an RSU server.
The RSU program does not run on the RSU server, however. It
runs only on the workstations. The RSU server consists only of
subdirectories and files on the file server.
Sample RSU installation
The fundamental idea is that all workstation configurations are
stored on the RSU server. RSU then copies the appropriate
modules to each workstation while retaining individual settings
or individual software on the workstations.
The file server used for RSU does not have to be the same file
server that is used for normal work. It is necessary, of
course, that users log in to the RSU server from time to time
to get the topical remote software update.
Since the file server does not usually run DOS a separate RSU
test workstation is needed to develop and test the
configurations. If testing on different hardware is needed then
one RSU test workstation is needed for each hardware setup. RSU
test workstations can be used for other work when they are not
being used for RSU development. Their RSU related configuration
has to be totally reset, however, before it is used for
testing. RSU can
copy predetermined files from the RSU server to the
workstations,
change the contents of subdirectories, even whole
subdirectory trees, on the workstation PCs such that they
become equal to their parents on the RSU server, by adding,
deleting or overwriting files on the target PC,
exclude certain subdirectories and files from directory
replication,
report all changes when synchronizing directories,
add, change, copy or delete certain sections or certain lines
in INI files like WIN.INI and SYSTEM.INI,
copy or delete sections in text files like AUTOEXEC.BAT and
CONFIG.SYS,
find out whether each workstation is already up to date and
skip the updating process,
detect BIOS signatures of certain hardware and, for example,
automatically install the appropriate drivers.
How RSU Works
Since the file server or any program running on any workstation
has normally no access to any local disks the main RSU program
has to run on each workstation to work its magic. The most
convenient way to achieve this is to run it each time any user
logs in to the RSU server.2
This can be achieved in different ways on different operating
systems. On a Novell network, for example, a command can be
called up after the system login script finishes, by using the
Novell EXIT "<command>" syntax or by calling it in the middle
of the login script with the # syntax. See the manual of your
network for details. RSU can be called from a DOS batch file.
It has one command line parameter which is the path of the RSU
program file. Example:
f:\rsu\rsu.exe f:\rsu\rsu.prg
RSU.EXE will execute the RSU program file. Files are typically
copied from the RSU server to the local disk or modified on the
local disk. Instead of the local disk the individual user
storage space may also be on a file server. In this case each
user's private storage should be mapped to a drive like U:,
such that each user sees his private storage area when he
refers to U:.
Installing RSU
RSU Server Preparation
Each file server can be a RSU server. The basic method is to
keep a mirror image of a workstation in a RSU server directory,
for example in F:\RSU\WSIMAGE. There can be several such
directories for several different configurations. The
configurations have to be created and tested on test
workstations, then copied to the RSU server. In addition the
RSU server needs one other directory with read-only access for
RSU.EXE and the RSU program file (example: RSU.PRG, example of
RSU read-only directory: F:\RSU).
The management of more than one workstation configuration can
easily achieved by creating small signal files on the different
workstations which indicate the configuration type. The
existence of any of these signal files can then be queried by a
simple "If Exist" command. Another method is the BIOS scan,
using RSU's BIOS function. Thus the BIOS version of the
computer or, for example, of the display adapter can be
determined automatically and the appropriate configuration
installed without any manual intervention.
Workstation Preparation
Before installing RSU you have to make sure that all
workstations connected to the RSU server have a valid minimal
installation. The absolute minimum would be an installed DOS
and the minimal network drivers to be able to connect to the
server.
It is recommended that you have an initial workstation setup
procedure to erase all RSU related directories and files from a
workstation and recreate the whole minimal setup from scratch.
This could be done with a batch file like INSTALL.BAT on the
RSU server. This will be very useful for users if they have
somehow destroyed vital files on their workstation. They will
then have a way to get up and running again if everything else
fails and no service person is available.
It is also conceivable to use RSU to such an extent that each
and every file on the workstation is covered by RSU. This would
have the advantage that every workstation would recover from
any loss or mutilation of files automatically when logging on
to the RSU server. But this will often not be practicable for
performance or other reasons.
RSU will run inside Windows and Windows NT. Note, however, that
Windows or Windows NT may keep certain files open, such that
these files themselves cannot be copied or updated. On Windows
NT, RSU, like many other DOS programs, requires read and write
access to the file CMOS.RAM in the SYSTEM32 directory. RSU,
like any DOS or 16 bit Windows program, cannot use long file
names, but it will use the automatic substitutes generated by
Windows NT.
The RSU Development Cycle
Steps in the RSU Development Cycle
The RSU development cycle is the process of developing a new
configuration. Frequently this will just be a small change in
an existing configuration, but it could also be an entirely new
configuration for a new type of workstation, for example.
Development proceeds in these steps:
1. Prepare a RSU test workstation by making it equivalent
to the topical RSU update level.
2. Create and test a new configuration or modify the
existing one on a test workstation.
3. Temporarily protect users from your RSU server changes.
4. Upload (copy) the new workstation configuration to the
RSU server or modify the existing one on the RSU server.
5. If necessary, adapt the RSU program file (example:
RSU.PRG).
6. Test the new RSU setup on a test workstation.
7. Activate the new setup, such that it gets installed on
all target workstation PCs (undo step 3).
In many cases this development cycle can be shortened by
skipping certain actions if their effect is minimal or if the
number of workstations is low enough such that some risk can be
taken.
The following sections describe these actions in detail.
Prepare an RSU Test Workstation
First you have to make sure that your RSU test workstation is
equal to a topical workstation elsewhere in the network. If the
test workstation has not been used for anything that might have
altered the files and directories concerned then it can be used
right away. If not, and whenever there are any doubts, the test
workstation should be installed fresh from the RSU server. It
is a good precaution to log in once after installation and
obtain the latest changes from the RSU server to make sure they
are included in the workstation image on the RSU server.
The RSU update level information can be stored in any file for
each workstation. You only have to edit this file or touch it
such that the file date or time is changed to force an update.
Start the RSU program, normally by logging in to the RSU
server. The test workstation should automatically be updated to
the topical update level. After the test workstation is up to
the present standard you can now make the desired changes.
Create and Test the New Module
Now you can make the desired modification on the test machine
only. Test thoroughly, since all your users who use that module
will depend on your conscientiousness.
Protect Users From Your Tests
As soon as you touch the RSU server all users who happen to use
the server will receive any modification. Therefore you have to
make sure that this does not happen.
There are several ways to protect users:
1. Deactivate the whole RSU server until you are done with
all changes. One way is to rename the RSU program. Without it
RSU will not be able to do anything. Another is to activate a
jump over the RSU part of the controlling batch file.
2. Leave the RSU server running and create a second RSU
server at least for the module you intend to work on. This is
not quite so difficult as it sounds. It may be necessary for
bigger changes that require some time to work out.
3. If you are making a very small change and you are
absolutely sure that even a mistake can do no harm you may
risk to work on the hot system. But be careful! Depending on
the number of workstations and likelihood of a login you
should be able to make the change within seconds. This might
be viable if you just want to change a few files, for
example. Again do not forget to change the date and time of
the RSU update level file afterwards, so all users get a new
update when they log in.
Upload the New Module to the RSU Server
After you have tested the new configuration thoroughly on your
test machine you can now copy the modifications to the RSU
server (for example to the F:\RSU\WSIMAGE directory and its
subdirectories). It is useful to have a program that can detect
the difference between files on two drives like the Norton
CommanderT with its "Compare directories" command. In any case
be sure to copy all changes from the test machine to the RSU
server.
Adapt the RSU Program
Now change the RSU program (example: F:\RSU\RSU.PRG) if
necessary. The modified RSU program should be able to copy all
modifications from the RSU server area to any workstation PC.
If you make changes to files by means of direct manipulation by
the RSU program, for example with IniChangeLine, be sure to
make those changes on the original files on the RSU server as
well, such that users who do an install from scratch also get
them immediately before they receive the next RSU update.
Test the New RSU Program
After the update is entirely in place but not yet activated you
should test it before releasing it to all users. For this you
either need a second test machine or you have to reset the
first one to the previous configuration which is still standard
for all other users.
Then you have to make sure that the new update affects only the
test machine but not yet all the other users. There are several
ways to achieve this. The easiest is to modify the RSU program
file such that only the testing user gets the update. Example:
...
If %USER% <> SUPERVISOR Then
Goto Not_yet
End If
rem Here enter the RSU commands to be tested.
Not_yet:
...
This sample batch file fragment presumes that the network user
name was written into the environment variable USER, for
example with the Novell Netware login script command:
DOS SET USER="%USER_ID".
Check whether the update is correct. You may have to test each
configuration separately if there are several.
Activate the New RSU Program
Finally, after you have convinced yourself that the new update
works correctly, you can release it to all users by removing
any blocking commands you might have inserted. From that very
moment all users who log on will receive the update.
Programming RSU
General Rules
RSU is an interpreter for the RSU control language which
strongly resembles BASIC and, to some extent, DOS batch files.
The RSU program is the file which controls all RSU operations.
It should reside on the RSU server, for example as
F:\RSU\RSU.PRG. All users should have read-only access to it.
RSU is started from DOS with either of the following commands:
RSU <program file name>
RSU.EXE <program file name>
RSU <program file name> /debug
RSU.EXE <program file name> /debug
The /debug switch produces a display of all commands, as they
are executed.
As long as the program is unregistered, it always displays a
shareware registration screen first. Apart from this, however,
the program is fully functional and may be tested with all
functions for 30 days. After that time the program must be
registered for further legal use, although the program would
technically still function properly.
Sample RSU Program
This is an example of an RSU.PRG file:
rem RSU.PRG file
rem First determine whether the user already has the
latest version:
If c:\rsu\version.txt Equal f:\rsu\version.txt Then
echo Your workstation has the latest update level.
Goto Finish
End If
rem Let user know what's going to happen to his
computer:
type f:\rsu\version.txt
pause
rem Modifications to WIN.INI:
IniCopySection f:\rsu\wsimage\win31\win.ini
c:\win31\win.ini [fonts]
IniCopySection f:\rsu\wsimage\win31\win.ini
c:\win31\win.ini [devices]
IniDeleteSection c:\win31\win.ini [ObscureOldProgram]
IniCopyLine f:\rsu\wsimage\win31\win.ini c:\win31\win.ini
[windows] load
IniDeleteLine c:\win31\win.ini [fonts] Swiss=
IniChangeLine c:\win31\win.ini [mail] mailbox=%USER%
rem Modifications to SYSTEM.INI:
IniAddLine c:\win31\system.ini [display] svgamode=98
rem Synchronization of user files:
SynchronizeDir
From f:\rsu\wsimage\win31
To c:\win31Add
End SynchronizeDir
SynchronizeDir
From f:\rsu\wsimage\util
To c:\util
Add
Overwrite
Delete
Subdirectories
End SynchronizeDir
rem Users with HappyVGA adapters get a new driver and
support
rem utilities. This requires that such users have a
signal file
rem c:\rsu\happyvga.sig:
If Exist c:\rsu\happyvga.sig Then
SynchronizeDir
From f:\rsu\wsimage\happyvga
To c:\happyvga
Add
Overwrite
Delete
Subdirectories
End SynchronizeDir
End If
rem Now install version text file to make sure that this
rem user doesn't get the same update again:
copy f:\rsu\version.txt c:\rsu
Finish:
rem End Of File
Execution Sequence
RSU is a pure and simple interpreter. This has consequences
especially when using the Goto command in connection with If,
Then, Else constructs. RSU takes these commands exactly in the
sequence they are processed. This means that a Goto jump into
an If structure can cause unexpected results if the programmer
isn't aware of the actual processing sequence. Therefore it is
not advisable to jump into an If command. Jumping out of an If
command doesn't hurt. The If construct is simply never
completed. But if it is done many times, for example in a loop,
it will eventually cause a memory overflow. You should
therefore try to use the Goto command sparingly and prudently.
Ghastly mistakes can happen if the interpreter encounters, for
example, an Else command after jumping out of an If construct,
because the interpreter would assume that the Else belongs to
the last encountered If command.
Alphabetical List of Commands
General Command Syntax and Semantics
All control files are text files in which each line is followed
by a carriage return/line feed pair (13dec and 10dec).
Spaces and tab characters in the beginning of any line are
totally ignored. In effect it is as if those characters were
removed before executing the RSU.PRG program.
Lines beginning with "REM " or ";" (a semicolon) are treated
as comments and not otherwise executed.
Upper and lower case are functionally equivalent. However, the
case is retained when information is forwarded into another
file.
Command parameters are separated by spaces, with the exception
of section headers (section name in brackets) and INI lines
after a section header. If a parameter itself contains one or
more spaces, it has to be enclosed in double quotes (character
no. 34 in the ASCII/ANSI alphabet), so it is not mistaken for
several separate parameters. If a quote character itself is to
be included, two adjacent quote characters have to be written,
but this is possible only within another pair of quotes.
Examples:
If Bios(C000-C080) = "ATI GRAPHICS" Then
...
End If
If %COMPUTER_TYPE% = "Label ""Taiwan""" Then
...
End If
The second example compares the environment variable
COMPUTER_TYPE with the following text, including the two
quotes: Label "Taiwan"
If the first word in any line is a valid RSU command then it is
executed. If not the line is deemed to be a DOS command and is
forwarded to the DOS command processor. Note, however, that not
every DOS command can be used. For example, the DOS command SET
has no effect because it is running under a secondary command
processor that has no access to the primary environment.
In the syntax definitions below, a few special characters and
words are used that have a special meaning.
A word enclosed in angle brackets is a placeholder for a user
defined, variable entry:
< >
The following placeholder stands for any valid RSU command:
<command>
An ellipsis stands for "more of the same":
...
Braces and vertical bars are used to define a user choice of
one out of several units. Only one can and must be chosen:
{ <choice 1> | <choice 2> | <choice 3> }
Sections
Several commands work on sections in .INI files. A section is
recognized by its header. It ends before the next section
header. A section header consists of a section name in
brackets. Examples:
[windows]
[HPPCL5A,LPT1:]
[Microsoft Word]
The section header must begin in cloumn 1, i.e. in the leftmost
position of a line. Technically spoken, the opening bracket
must immediately follow the carriage return, line feed pair
that ends the previous line, or it must be the first byte of
the whole file. All lines following the section header belong
to this section until another section header follows.
Note that section headers can contain spaces. RSU still
recognizes the section header by the enclosing brackets. You
don't need double quotes when referring to a section header in
an RSU command.
To facilitate manipulation of sections in files like
AUTOEXEC.BAT or CONFIG.SYS, a second, alternative form of
section header is also recognized, which consists of the
abbreviation REM in upper, lower or mixed case, followed by
exactly one space, followed by a section header as described
above. The R in REM must be in the leftmost column. Examples:
REM [drives]
Rem [NETWORK DRIVERS]
rem [User Specific Settings]
Warning: Never use the
alternative REM syntax inside an RSU command file. All
RSU commands work without containing the word REM, even
if the target files contain it.
Hint: If you want to turn such REM lines into real comments
rather than RSU section headers, insert at least a
second space or any other characters between REM and [.
Hint: While all RSU commands will recognize and accept this
alternative syntax and work on it and in the sections
thus designated, only the command IniCopySection can
put such a section header into a file.
Environment Variables
Environment variables can be inserted in any command with the
syntax:
%<environment variable>%
Example:
IniChangeLine C:\WIN31\WIN.INI [mail] mailbox=%USER%
This example will take the name from the USER= entry in the
environment and substitute it for %USER% before executing the
IniChangeLine command. For example, if the environment contains
an entry reading:
USER=DANIEL
then the command above will be changed to:
IniChangeLine C:\WIN31\WIN.INI [mail] mailbox=DANIEL
which is useful for example to save users the separate logging
in to Microsoft⌐ Mail.
The substitution happens before any quote characters are
processed, i.e. environment variables can be used inside
quotes. To use a percent character (%) for other purposes, you
have to write two adjacent percent characters (%%). However,
RSU cannot use environment variable names that contain percent
characters. You can use the double-percent feature only outside
environment variable names.
Environment variable names may contain spaces (example: %DEPT
NAME%). It is not necessary to enclose them in quotes because
of these spaces-RSU already recognizes the percent signs and
processes them before spaces are considered. But superfluous
quotes outside the variable name don't do any harm either.
Hint: Novell Netware 3.11 can place essential system
information entries into the environment with the SET
<variable>="<text>" syntax of its login scripts.
Example of a command in a Netware login script:
SET USER="%USER_ID"
DOS Commands
Any command found in an RSU program file that is not a valid
RSU command is deemed to be a DOS command. A secondary command
processor (COMMAND.COM) is loaded and the command forwarded to
it and executed.
There is no error checking and no logging with DOS commands, so
be careful to test and use them properly.
Echo
This command simply echoes some text on the screen. It works
like the DOS command with the same name. It was incorporated
only to increase speed and to avoid unnecessary empty lines on
screen.
Syntax:
Echo <text>
Example:
Echo RSU is now installing new video drivers...
Goto
This command continues execution of the RSU program file at the
point after the label. The label can be anywhere else in the
program file but has to be in its own line, i.e. no other
command can follow in the line that contains the label.
A label must be at least two characters long, not counting the
colon. The reason for this is that c: means change to drive C:,
rather than a label C. Labels may contain letters, digits and
the underscore _. They may not contain spaces, umlauts or any
other special characters.
Syntax:
Goto <label>
...
<label>:
Example:
Goto Finish
...
Finish:
If
This command executes the other commands embedded between If
and End If only if the condition after the If is met.
In addition, an Else clause can be inserted. The commands after
the Else and before the final End If are only executed if the
condition after the If is not met.
The comparison operators < <= = >= > <> determine
whether the character string to the left is less than, less or
equal, equal, greater or equal, greater than, unequal to the
string on the right of the operator, ignoring upper or lower
case. Thus a = A would count as true.
The operator "Exist" followed by a filename determines whether
the following file exists, similar to the equivalent DOS batch
command.
The operator "Equal" between two filenames determines whether
the two files are exactly equal in size, date and time.
A special form is the BIOS search. This allows to search a
certain range of memory addresses within the first megabyte for
a word. The syntax of the If clause is:
If Bios(<hexadr>-<hexadr>) = <text> Then
Example:
If Bios(F000-F100) = AMI Then
Echo This computer has an AMI Bios.
End If
The BIOS search allows only the equal operator = and cannot be
written with the search word on the left side of the equal
sign. The search is case insensitive. Note also that you have
to use double quotes if you want to search for more than one
word, because the present syntax uses the space as a delimiter
if not enclosed in double quotes. You may write:
If Bios(C000-C080) = "ati graphics ultra" Then
Echo ATi Graphics Ultra found.
End If
Note that after the If and between any other elements on the
line one or more spaces are needed. Thus it would be wrong to
write:
If %USER%=DANIEL Then
The correct form is:
If %USER% = DANIEL Then
If any of the variables contains spaces, it must be enclosed in
double quotes. Apart from that, an If command with a comparison
operator must have exactly 5 words in the line.
Syntax (4 different forms):
If <condition> Then
<command>
...
End If
If <condition> Then
<command>
...
Else
<command>
...
End If
If Not <condition> Then
<command>
...
End If
If Not <condition> Then
<command>
...
Else
<command>
...
End If
<condition> = { <text 1> <comparison operator> <text 2> |
Exist <filename> | <filename 1> Equal <filename 2> } |
Bios(<hexadr>-<hexadr>) = <text>
<comparison operator> = { < | <= | = | >= | > | <> }
<hexadr> = 0 .. FFFF
Examples:
If Not %USER% = SUPERVISOR Then
Goto Finish
End If
...
Finish:
If Not c:\rsu\version.txt Equal f:\rsu\version.txt Then
copy f:\rsu\version.txt c:\rsu
...
Else
echo You already have the latest version. No update
necessary.
EndIf
If Not Exist c:\windows\win.ini Then
echo Your disk is not properly installed. Please follow
echo the instructions to perform the base installation,
echo then log on again.
Goto Get_Out
End If
If Bios(F000-F200) = Dell Then
c:\dell\keyb.com gr,,c:\dos\keyboard.sys
Else
c:\dos\keyb.com gr,,c:\dos\keyboard.sys
End If
Hint: End If can be written with or without a space between
End and If, i.e. either "End If" or "EndIf". The
preferred form is: "End If".
Warning: Between each of
two keywords, operators and operands one space is
required.
Warning: Do not use the
Goto command to jump into an If - End If structure. Do
not use the Goto command to jump out of an If - End If
structure many times, for example in a loop with more
than a few repetitions.
IniAddLine
This command is used to add a line where several lines have the
same variable name, like for example the device= lines in
SYSTEM.INI. It appends one further line to the section. If the
section does not exist it is newly created and appended to the
.INI file first.
The only exception occurs if the exact line, variable name and
text, exists in the file already. In this particular case the
command has no effect. In other words, the command does not
produce exact duplicates of whole lines like:
device=VSHARE.386
device=VSHARE.386
Syntax:
IniAddLine <ini file> [<section name>] <variable
name>=<text>
Example:
IniAddLine C:\WIN31\SYSTEM.INI 386Enh device=VSHARE.386
IniChangeLine
This command changes the text after the equals sign (=) in a
certain section and a certain line in an .INI file. If the
section does not exist it is newly created and appended to the
.INI file first. If the line does not exist it is newly created
and appended at the end of the section. If several lines with
the same variable name exist in the section then this command
is probably not appropriate and should not be used since it
would change only one of the lines.
Syntax:
IniChangeLine <ini file> [<section name>]
<variable>=<text>
Example:
IniChangeLine C:\WIN31\WIN.INI [windows] load=NWPOPUP.EXE
Note that there is presently no command to change only part of
a line. If something like this is desired one possible
workaround is to use EDLIN in batch mode.
IniCopyLine
This command finds a certain line within a section in an .INI
file and copies it into another .INI file. If a line with the
same variable name to the left of the equals sign (=) already
exists it is replaced with the new line. If several lines with
the same variable name exist in the section then this command
is probably not appropriate. It will work on the first
occurrence of the variable. If the section does not exist in
the target .INI file, it is newly created and appended to the
.INI file first.
Syntax:
IniCopyLine <source ini file> <target ini file> [<section
name>] <variable>
Examples:
IniCopyLine F:\RSU\WSIMAGE\WIN31\WIN.INI C:\WIN31\WIN.INI
[windows] load
IniCopyLine F:\RSU\WSIMAGE\WIN31\WIN.INI C:\WIN31\WIN.INI
[windows] load=
Both example lines do the same thing. Each one would search the
file F:\RSU\WSIMAGE\WIN31\WIN.INI for the section [windows].
Within the section it would locate the line beginning with
load= and copy it into the line with the same section and
variable name in the file C:\WIN31\WIN.INI.
IniCopySection
This command works similar to the previous one but copies a
whole section. If a section with the same name already exists
in the target file, it is deleted and the new section copied
and inserted in its place. IniCopySection also inserts an empty
line before and after the section if there was none, to make
the file easier to read and conform with the usual practice in
Windows .INI files.
Syntax:
IniCopySection <source ini file> <target ini file>
[<section name>]
Example:
IniCopySection F:\RSU\WSIMAGE\WIN31\WIN.INI
C:\WIN31\WIN.INI [HPPCL5A,LPT1:]
This example would copy the whole section [HPPCL5A,LPT1:] from
F:\RSU\WSIMAGE\WIN31\WIN.INI to C:\WIN31\WIN.INI. If there was
a section with that name before it will be overwritten and all
information lost entirely. If the previous section contained
more or other lines than the new those old lines will be lost.
IniDeleteLine
This command deletes a line in an .INI file.
Syntax:
IniDeleteLine <ini file> [<section name>] <variable>
IniDeleteLine <ini file> [<section name>] <variable>=
IniDeleteLine <ini file> [<section name>]
<variable>=<value>
Examples:
IniDeleteLine C:\WIN31\WIN.INI [mail] Polling
IniDeleteLine C:\WIN31\WIN.INI [mail] Polling=
IniDeleteLine C:\WIN31\SYSTEM.INI [386Enh] device=comm.drv
This example will search C:\WIN31\WIN.INI for the section
[mail] and in this section for the line beginning with
Polling=. This line will be deleted from WIN.INI. It will then
search C:\WIN31\SYSTEM.INI, section [386Enh] and delete the
line device=comm.drv. Note that, with this syntax, other
device= lines are not affected. This makes it possible to
change particular lines when the same variable occurs more than
once, as usual with the device= lines in SYSTEM.INI.
IniDeleteSection
Syntax:
IniDeleteSection <ini file> [<section name>]
Example:
IniDeleteSection C:\WIN31\WIN.INI [Microsoft Word]
This example will search C:\WIN31\WIN.INI for the section
[Microsoft Word]. The entire section will be deleted from
WIN.INI.
SynchronizeDir
Makes the target directory equal to the source directory
including all files, including files that have a read-only,
hidden or system attribute.
SynchronizeDir handles all files regardless of their
attributes. Attributes are copied with each file only if the
Preserve subcommand is used. Without it the archive attribute
is set and all other attributes are reset in the target file.
SynchronizeDir is a multi-line command and requires several
subcommands to control its operation. Each subcommand has to be
in one line. Empty lines and comment lines can also be used
freely. The following subcommands can be used, and at least To
and From and one other of them has to be used, otherwise
SynchronizeDir will not do anything:
From Write the source directory after this subcommand.
To Write the target directory after this subcommand.
Delete Delete files from the target directory if they don't
exist in the source directory.
Add Add files to the target directory if they are not there
already.
Overwrite Overwrite files
in the target directory if they also exist in the
source directory but are different (have different
size, date or time). This subcommand may not be used
together with the Conflict subcommand.
Conflict Conflict
management. This subcommand may not be used together
with the Overwrite subcommand. If a file name exists in
both source and target directories but with different
size, date or time, then this is considered a conflict
and the following actions are taken:
1. Both files are put into the target directory and
the older one gets a new name like !SYNnnnn.xxx
where nnnn is a number between 0001 and 9999 and xxx
is the original extension of the file.
2. A line is appended to the file !SYN0000.TXT in the
target directory containing the date, time and
conflicting file information separated by semicolons
(;), ready for import into a conflict database.
One possible purpose of this function is to allow users
with portable PCs to copy their network user
directories home with them and later reconciliate their
local user directories with those on the network if
both can have changed.
Subdirectories Process subdirectories. All subdirectories of
the directory to be synchronized are also processed.
Preserve Preserve
attributes. With this subcommand the hidden, system and
read-only attributes are copied from each source file
to each destination file. Without this subcommand,
these attributes are reset in the target file.
Warning: The Preserve subcommand affects only files
that are copied for other reasons. It does not
mean that existing equal files will now get
their attributes copied if these are different.
Keep in mind that the attributes are not used
to determine whether two files are equal.
Report Write the report file name (complete with path, if
desired) after this subcommand. Report all changes to a
report text file. If the report text file already
exists, the new records/lines are appended.
The report text file consists of one line for each
reported file, followed by one carriage return and one
line feed character. Each line contains the following 9
fields, separated by tab characters (character no. 9 in
the ASCII/ANSI alphabet):
1. Transaction date in the format: YYYY-MM-DD
Example: 1994-07-21
2. Transaction time in the 24 h format: HH:MM:SS
Example: 23:59:30
3. Operation: ADD, DELETE, OV-ADD, OV-DEL, REN-ADD,
REN-DEL. Since each line reports only one file,
overwrite and rename operations (which work on two
files) are reported in two lines, as if the file
were first deleted, then added. The first contains
OV-DEL or REN-DEL and reports the disappearing file.
The next contains OV-ADD or REN-ADD and reports the
new file.
4. File or directory: FILE, DIR
5. Path and file name (if file). Examples:
C:\SUBDIR\FILE.EXT, C:\SUBDIR
6. File/dir date in the format: YYYY-MM-DD Example:
1994-06-15
7. File/dir time in the 24 h format: HH:MM:SS
Example: 13:35:50
8. File size in bytes (empty for directories).
Example: 1735024
9. File attributes in the format: HSRA with minus
signs in the place of attributes that are not set.
Example for a file with read-only and archive
attributes, but no hidden or system attributes: - -
RA
ReportOnly Requires the
presence of the Report subcommand (see above). No
changes are actually made to directories or files. Only
the report file is written (appended) as if the changes
had been made. This can be used for testing or if the
report file is evaluated by other means.
DirsLike Only one
DirsLike statement can be included with any
SynchronizeDir command. If it is present, only matching
directories are processed. Write one directory name
after this command. The name can contain the wildcard
characters * and ? in the same way they are used in DOS
commands.
FilesLike Only one
FilesLike statement can be included with any
SynchronizeDir command. If it is included, only
matching files are processed. Write one file name after
this command. The name can contain the wildcard
characters * and ? in the same way they are used in DOS
commands.
ExcludeDir Protect this
directory and all its subdirectories from
synchronization, i.e. do not read, compare, copy,
change or delete it and do not synchronize it with
anything. The directory can be given with full path and
even the drive specified. If it is given without a full
path, i.e. with neither a drive designator nor a
backslash (\) at the beginning, then all directories
with this name and all their subdirectories are
excluded from synchronization if several occur within
the directory tree. The ExcludeDir subcommand can occur
several times with different subdirectories. It is
useful only when the Subdirectories subcommand is also
present.
ExcludeFile Protect this
file from synchronization, i.e. do not read, compare,
copy, change or delete it and do not synchronize it
with anything. The file can be given with full path and
even with the drive specified. If it is given without a
full path, i.e. with neither a drive designator nor a
backslash (\) at the beginning, then all files with
this name are excluded from synchronization if several
occur within the directory, or within the whole
directory tree. The file name can contain the wildcard
characters * and ? which have the same function as in
DOS. The ExcludeFile subcommand can occur several times
with different files.
End SynchronizeDir This ends the
complete SynchronizeDir command. Exactly one space has
to be between "End" and "SynchronizeDir". This
subcommand is always required after all others.
Warning: SynchronizeDir
will overwrite or erase files with any attributes in
the target directory and, with the Subdirectories
subcommand, any of its subdirectories, even if they are
read-only, hidden or system files.
Syntax:
SynchronizeDir
From <source directory>
To <target directory>
[Delete]
[Add]
[{ Overwrite | Conflict }]
[Subdirectories]
[Preserve]
[Report <report text file path and name>
[ReportOnly]]
[DirsLike <directory name with or without path and * or
? characters>]
[FilesLike <file name with or without path and * or ?
characters>]
[ExcludeDir <directory>]
...
[ExcludeFile <file name with or without path and * or ?
characters>]
...
End SynchronizeDir
Examples:
SynchronizeDir
From F:\RSU\WSIMAGE\U
To C:\U
Delete
Overwrite
Add
Subdirectories
FilesLike *.BA*
ExcludeDir F:\RSU\WSIMAGE\U\ADMIN
ExcludeFile *.BAK
Report C:\SETUP\SYNCREP.TXT
Preserve
End SynchronizeDir
SynchronizeDir
From F:\RSU\WSIMAGE\DOS
To C:\DOS
Overwrite
Add
End SynchronizeDir
The first example would make the directory C:\U and all of its
subdirectories exactly equal to the directory F:\RSU\WSIMAGE\U
and all of its subdirectories, as far as *.BA* files are
concerned, except for the directory F:\RSU\WSIMAGE\U\ADMIN,
which is entirely skipped. If a target directory C:\U\ADMIN
exists, it is not touched either. All files with the extension
.BAK are skipped. If files with the extension .BAK exist in the
target directory, they also remain untouched. If files are
copied, their file attributes are copied with them. A report
text file C:\SETUP\SYNCREP.TXT is written, containing a list of
all file changes.
The second would overwrite any files in C:\DOS that are
different from their namesakes in F:\RSU\WSIMAGE\DOS. It would
also add files that are missing in C:\DOS, but it would not
delete or otherwise touch any additional files the user may
have added to his DOS directory. It would also not touch any
subdirectories of C:\DOS.
SynchronizeDir (Old Syntax)
This one-line version of the SynchronizeDir command is retained
only for compatibility purposes and will be dropped from a
future version of RSU. Please don't use it any more.
Note that the newer exclude subcommands and the ReportOnly
subcommand are not available in this old syntax.
Makes the target directory equal to the source directory
including all files, including files that have a read-only,
hidden or system attribute.
SynchronizeDir handles all files regardless of their
attributes. Attributes are copied with each file only if the /P
switch is used. Without that switch the archive attribute is
set and all other attributes are reset in the target file.
The SynchronizeDir command requires switches to control its
operation. The following switches can be used, and at least one
of them has to be used, otherwise SyncDir will not do anything:
/D Delete files
from the target directory if they don't exist in the
source directory.
/A Add files to
the target directory if they are not there already.
/O Overwrite files
in the target directory if they also exist in the
source directory but are different (have different
size, date or time). This switch may not be used
together with the /C switch.
/C Conflict
management. This switch may not be used together with
the /O switch. If a file name exists in both source and
target directories but with different size, date or
time, then this is considered a conflict and the
following actions are taken:
1. Both files are put into the target directory and
the older one gets a new name like !SYNnnnn.xxx
where nnnn is a number between 0001 and 9999 and xxx
is the original extension of the file.
2. A line is appended to the file !SYN0000.TXT in the
target directory containing the date, time and
conflicting file information separated by semicolons
(;), ready for import into a conflict database.
One possible purpose of this function is to allow users
with portable PCs to copy their network user
directories home with them and later reconciliate their
local user directories with those on the network if
both can have changed.
/S Process
subdirectories. All subdirectories of the directory to
be synchronized are also processed.
/R Report all
changes to a report text file. The filename (including
path if desired) has to follow the /R switch either
with or without an intervening space. If the report
text file already exists, the new records/lines are
appended.
The report text file consists of one line for each
reported file, followed by one carriage return and one
line feed character. Each line contains the following 9
fields, separated by tab characters (character no. 9 in
the ASCII/ANSI alphabet):
1. Transaction date in the format: YYYY-MM-DD
Example: 1994-07-21
2. Transaction time in the 24 h format: HH:MM:SS
Example: 23:59:30
3. Operation: ADD, DELETE, OV-ADD, OV-DEL, REN-ADD,
REN-DEL. Since each line reports only one file,
overwrite and rename operations (which work on two
files) are reported in two lines, as if the file
were first deleted, then added. The first contains
OV-DEL or REN-DEL and reports the disappearing file.
The next contains OV-ADD or REN-ADD and reports the
new file.
4. File or directory: FILE, DIR
5. Path and file name (if file). Examples:
C:\SUBDIR\FILE.EXT, C:\SUBDIR
6. File/dir date in the format: YYYY-MM-DD Example:
1994-06-15
7. File/dir time in the 24 h format: HH:MM:SS
Example: 13:35:50
8. File size in bytes (empty for directories).
Example: 1735024
9. File attributes in the format: HSRA with minus
signs in the place of attributes that are not set.
Example for a file with read-only and archive
attributes, but no hidden or system attributes: - -
RA
/P Preserve
attributes. With this switch the hidden, system and
read-only attributes are copied from each source file
to each destination file. Without this switch, these
attributes are reset in the target file.
Warning: The /P
parameter affects only files that are copied for other
reasons. It does not mean that existing equal files
will now get their attributes copied if these are
different. Keep in mind that the attributes are not
used to determine whether two files are equal.
Warning: SynchronizeDir
will overwrite or erase files with any attributes in
the target directory and, with the /S switch, any of
its subdirectories, even if they are read-only, hidden
or system files.
Syntax:
SynchronizeDir <source directory> <target directory> [/D]
[< /O | /C >] [/A] [/S] [/R <report text file path and
name>] [/P]
Examples:
SynchronizeDir F:\RSU\WSIMAGE\U C:\U /D /O /A /S /R
C:\SETUP\SYNCREP.TXT /P
SynchronizeDir F:\RSU\WSIMAGE\DOS C:\DOS /O /A
The first line would make the directory C:\U and all of its
subdirectories exactly equal to the directory F:\RSU\WSIMAGE\U
and all of its subdirectories. If files are copied, their file
attributes are copied with them. A report text file
C:\SETUP\SYNCREP.TXT containing all file changes is written.
The second would overwrite any files in C:\DOS that are
different from their namesakes in F:\RSU\WSIMAGE\DOS. It would
also add files that are missing in C:\DOS, but it would not
delete or otherwise touch any additional files the user may
have added to his DOS directory. It would also not touch any
subdirectories of C:\DOS.
Brief Command Overview
In the following text each group of syntax lines is followed by
one or more example lines which are indented.
RSU <program file name>
RSU.EXE <program file name>
RSU <program file name> /debug
RSU.EXE <program file name> /debug
f:
cd \rsu
rsu rsu.prg
Echo <text>
Echo RSU is now installing new video drivers...
Goto <label>
Goto Finish
<label>:
Finish:
If [Not] <condition> Then
<command>
...
[Else
<command>
...]
End If
If [Not] <condition> Then
<command>
...
[Else
<command>
...]
EndIf
<condition> = { <text 1> <comparison operator> <text 2> | Exist
<filename> | <filename 1> Equal <filename 2> } |
Bios(<hexadr>-<hexadr>) = <text>
<comparison operator> = { < | <= | = | >= | > | <> }
<hexadr> = 0 .. FFFF
If Bios(F000-F100) = AMI Then
Echo This computer has an AMI Bios.
End If
If Not %USER% = SUPERVISOR Then
Goto Finish
End If
...
Finish:
(The example above also shows how to insert an environment
variable.)
IniAddLine <ini file> [<section name>] <variable name>=<text>
IniAddLine C:\WIN31\SYSTEM.INI 386Enh device=VSHARE.386
IniAddLine C:\WIN31\SYSTEM.INI 386Enh device=NETWARE.386
IniChangeLine <ini file> [<section name>] <variable>=<text>
IniChangeLine C:\WIN31\WIN.INI [windows] load=NWPOPUP.EXE
IniChangeLine C:\WIN31\WIN.INI [mail] mailbox=%USER%
(The second example above also shows how to insert an
environment variable.)
IniCopyLine <source ini file> <target ini file> [<section
name>] <variable>
IniCopyLine F:\RSU\WSIMAGE\WIN31\WIN.INI C:\WIN31\WIN.INI
[windows] load
IniCopyLine F:\RSU\WSIMAGE\WIN31\WIN.INI C:\WIN31\WIN.INI
[windows] load=
IniCopySection <source ini file> <target ini file> [<section
name>]
IniCopySection F:\RSU\WSIMAGE\WIN31\WIN.INI
C:\WIN31\WIN.INI [HPPCL5A,LPT1:]
IniDeleteLine <ini file> [<section name>] <variable>
IniDeleteLine <ini file> [<section name>] <variable>=
IniDeleteLine <ini file> [<section name>] <variable>=<value>
IniDeleteLine C:\WIN31\WIN.INI [mail] Polling
IniDeleteLine C:\WIN31\WIN.INI [mail] Polling=
IniDeleteLine C:\WIN31\SYSTEM.INI [386Enh] device=comm.drv
IniDeleteSection <ini file> [<section name>]
IniDeleteSection C:\WIN31\WIN.INI [Microsoft Word]
SynchronizeDir
From <source directory>
To <target directory>
[Delete]
[Add]
[{ Overwrite | Conflict }]
[Subdirectories]
[Preserve]
[Report <report text file path and name>
[ReportOnly]]
[DirsLike <directory name with or without path and * or ?
characters>]
[FilesLike <file name with or without path and * or ?
characters>]
[ExcludeDir <directory>]
...
[ExcludeFile <file name with or without path and * or ?
characters>]
...
End SynchronizeDir
SynchronizeDir
From F:\RSU\WSIMAGE\U
To C:\U
Delete
Overwrite
Add
Subdirectories
FilesLike *.BA*
ExcludeDir F:\RSU\WSIMAGE\U\ADMIN
ExcludeFile *.BAK
Report C:\SETUP\SYNCREP.TXT
Preserve
End SynchronizeDir
SynchronizeDir
From F:\RSU\WSIMAGE\DOS
To C:\DOS
Overwrite
Add
End SynchronizeDir
Other features:
%<environment variable>% is replaced by the contents of
the environment variable.
%% is replaced by %
"<any text containing spaces>" is taken as one
parameter.
"" is replaced by "
___________________________
1 The term "workstation" is used here for all user PC's
connected to the network, using DOS, not for engineering
workstations running Unix or the like.
2 Another method is to run it each time the workstation is
started, from the AUTOEXEC.BAT file. Since users have few
rights on the file server at that time it would be necessary to
adjust those rights such that all users have reading rights to
all RSU data without being logged in. This may or may not be
possible on different network operating systems.